/**
 * -- 栈是一种特殊的线性表，仅能够在栈顶进行操作，有着先进后出（后进先出）的特性
 *
 * @author lmay.Zhou
 * @since 2019/4/7 21:42 星期日
 * @qq 379839355
 * @email lmay@lmaye.com
 */
function Stack() {
    let items = [];

    /**
     * 向栈里压入一个元素
     *
     * @param item  元素
     */
    this.push = function(item) {
        items.push(item);
    };

    /**
     * 把栈顶元素弹出
     *
     * @returns {*}
     */
    this.pop = function() {
        return items.pop();
    };

    /**
     * 返回栈顶元素
     *
     * @returns {*}
     */
    this.top = function() {
        return items[items.length - 1];
    };

    /**
     * 返回栈是否为空
     *
     * @returns {boolean}
     */
    this.isEmpty = function() {
      return items.length == 0;
    };

    /**
     * 返回栈的大小
     *
     * @returns {number}
     */
    this.size = function () {
        return items.length;
    };

    /**
     * 清空栈
     */
    this.clear = function() {
        items = [];
    };
}

exports.Stack = Stack;